#include<iostream>
#include<string>
#include<unordered_map>
using namespace std;
unordered_map<char, int> index_map;
/**
 * 递归构建二叉树并返回后序遍历结果
 *
 * @param pre_order 前序遍历字符串
 * @param in_order  中序遍历字符串
 * @param pre_left  当前子树在前序中的起始位置
 * @param pre_right 当前子树在前序中的结束位置
 * @param in_left   当前子树在中序中的起始位置
 * @param in_right  当前子树在中序中的结束位置
 * @return string 该子树的后序遍历结果
 */
string buildAndPostOrder( string& pre_order,  string& in_order,
                         int pre_left, int pre_right,
                         int in_left, int in_right) {
    // 终止条件
    if (pre_left > pre_right) return "";

    // 前序的第一个字符是当前子树的根节点
    char root_val = pre_order[pre_left];

    // 在中序中找到根节点的位置
    int in_root = index_map[root_val];

    // 计算左子树的大小
    int left_subtree_size = in_root - in_left;

    // 递归构建并获取左、右子树的后序结果
    string left_post = buildAndPostOrder(pre_order, in_order,
                                         pre_left + 1, pre_left + left_subtree_size,
                                         in_left, in_root - 1);

    string right_post = buildAndPostOrder(pre_order, in_order,
                                          pre_left + left_subtree_size + 1, pre_right,
                                          in_root + 1, in_right);

    // 后序遍历：左 + 右 + 根
    return left_post + right_post + root_val;
}


int main(){
	string preorder,inorder;
	int n;
	while(true){
		cin>>n;
		if(n==0)break;
		cin>>preorder>>inorder;
		//构建中序遍历值到索引的映射，加快查找速度
		index_map.clear();
		for (int i = 0; i < n; ++i) {
            index_map[inorder[i]] = i;
        }
        // 调用构建函数并输出后序结果
        string postorder = buildAndPostOrder(preorder, inorder, 0, n - 1, 0, n - 1);
        cout << postorder << endl;
	}
	
	
	return 0;
}